package com.chenxi.vhr.utils;

import java.math.BigDecimal;

/**
 * 计算工具类
 * @author : zhangchenxi
 * @create : 2022-02-12
 **/
public class MathUtil {


    /**
     * 加
     */
    public static BigDecimal add(BigDecimal[] b) {
        BigDecimal rtn = b[0];
        for (int i = 1; i < b.length; i++) {
            rtn = add(rtn, b[i]);
        }
        return rtn;
    }

    public static BigDecimal add(BigDecimal b1, BigDecimal b2) {
        if (b1 == null)
            return b2;
        if (b2 == null)
            return b1;
        return b1.add(b2);
    }

    public static Integer add(Integer i1, Integer i2) {
        if (i1 == null)
            return i2;
        if (i2 == null)
            return i1;
        return Integer.valueOf(i1.intValue() + i2.intValue());
    }


    /**
     * 减法
     * @param b1
     * @param b2
     * @return
     */
    public static BigDecimal minus(BigDecimal b1, BigDecimal b2) {
        if (b2 == null)
            return b1;
        if (b1 == null)
            return b2.negate();
        return b1.add(b2.negate());
    }

    public static Integer minus(Integer i1, Integer i2) {
        if (i1 == null)
            return i2;
        if (i2 == null)
            return i1;
        return Integer.valueOf(i1.intValue() - i2.intValue());
    }


    /**
     * 乘法
     */
    public static BigDecimal multiply(BigDecimal b1, BigDecimal b2, int scale) {
        if ((b1 == null) || (b2 == null)) {
            return null;
        }
        return b1.multiply(b2).setScale(scale, 4);
    }

    public static BigDecimal multiply(BigDecimal b1, BigDecimal b2) {
        if ((b1 == null) || (b2 == null)) {
            return null;
        }
        return b1.multiply(b2);
    }

    public static BigDecimal multiply(BigDecimal b, int i) {
        return multiply(b, new BigDecimal(i));
    }

    /**
     * 除法
     */
    public static BigDecimal divide(BigDecimal b1, BigDecimal b2, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        if ((b1 == null) || (b1.doubleValue() == 0.0D)) {
            return null;
        }
        if ((b2 == null) || (b2.doubleValue() == 0.0D)) {
            return null;
        }
        return b1.divide(b2, scale, 4);
    }

    public static BigDecimal divide(BigDecimal b, int i, int scale) {
        return divide(b, new BigDecimal(i), scale);
    }

    public static BigDecimal divide(int i1, int i2, int scale) {
        BigDecimal b = new BigDecimal(i1);
        return divide(b, new BigDecimal(i2), scale);
    }



    // 货币相关
}
